package com.itbaizhan.controller;

import com.itbaizhan.domain.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Date;
import java.util.List;

//spring容器注解
@Controller
@RequestMapping("/c1")
public class MyController1 {
    //springMVC参数获取  不论写多小个方法获取参数，路径不可以相同

    //封装关联对象  对象中含有另一个对象  student 中含有address对象
   /*访问该方法时，请求参数名和方法参数的属性名相同，即可完成自动封装。*/
   /* http://localhost:8080/c1/param3?id=1&name=bz&age=22&address.info=beijing&address.postcode=030000*/
    @RequestMapping("/param")
    public void objParam(Student student){
        System.out.println(student);
    }


    /*封装为简单数据类型的list参数
     * 在参数中加@RequestParam*/
    //请求的参数写法  注意：users= &users=
    //http://localhost:8080/c1/param4?users=bj&users=sxt
    @RequestMapping(value = "/param1")
    public void objParam1(@RequestParam List<String> user){
        System.out.println(user);
    }

    //数组类型 请求的参数写法
    // http://localhost:8080/c1/param5?users=bj&users=sxt
    @RequestMapping(path = "/param2")
    public void objParam2(@RequestParam String[] user){
        System.out.println(user[0]);
        System.out.println(user[1]);
    }


    /*封装对象类型集合
     * SpringMVC不支持将参数封装为对象类型的List集合，
     * 但可以封装到有List属性的对象中 */

    //不可以这样写，SpringMVC不支持将参数封装为对象类型的List集合
   /* @RequestMapping("/c1/param6")
    public void listParam3(@RequestParam List<Student> students){
        System.out.println(students);
    }*/
    //可以封装到有List属性的对象中
    // 将Address 的集合属性编写在Student中
    /*请求的参数写法

http://localhost:8080/c1/param6?
id=1&name=bz&sex=female&address[0].info=bj&address[0].postcode=100010
&address[1].info=sh&address[1].postcode=100011*/
    @RequestMapping("/param3")
    public void objList(Student student){
        System.out.println(student);
    }
    //springMVC要封装Map集合，需要封装到有Map属性的对象中。
/*
* 请求的参数写法
  注意键值对的写法   key用one表示
http://localhost:8080/c1/param7?id=1&name=bz&sex=female&
* address[‘one’].info=bj&address[‘one’].postcode=100010
* &address[‘two’].info=sh&address[‘two’].postcode=100011*/
    @RequestMapping("/param4")
    public void mapParam(Student student){
        System.out.println(student);
    }


    /*前端传来的参数全部为字符串类型，SpringMVC使用自带的转换器将字符串参数转为需要的类型
    *但在某些情况下，无法将字符串转为需要的类型
    * 日期数据有很多种格式，SpringMVC没办法把所有格式的字符串转换
    * 成日期类型。比如参数格式为birthday=2025-01-01时，
    * SpringMVC就无法解析参数。此时需要自定义参数类型转换器。

    1,定义类型转换器类，实现Converter接口
    * 2,注册类型转换器对象
    * 此时再访问http://localhost:8080/c1/param9?birthday=2025-01-01时，
    * SpringMVC即可将请求参数封装为Date类型的参数。*/
    //  日期的字符串转为data格式
    @RequestMapping("/param9")
    public void dateParam(Date birthday){
        System.out.println(birthday);
    }
}
